home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / music / 7 / ramdisk / ram.s < prev    next >
Text File  |  1985-11-19  |  4KB  |  136 lines

  1. *
  2. * ram.s
  3. *
  4. * ramdisk for atari 520 st+
  5. * written nov 85 by Jens-Uwe Mager
  6. *
  7.  
  8. blocks    =         512                 ;size in 1 Kbyte blocks
  9.  
  10. * offsets into base-page
  11.  
  12. prglen    =         $c
  13. datalen   =         $14
  14. bsslen    =         $1c
  15. cmdlin    =         $80
  16.  
  17. * atari globals
  18.  
  19. hdv_bpb   =         $472
  20. hdv_rw    =         $476
  21. hdv_media =         $47e
  22.  
  23. drvbits   =         $4c2
  24.  
  25. xbios     =         14
  26. tos       =         1
  27.  
  28. keepterm  =         $31
  29. supexec   =         38
  30.  
  31.           .text
  32.  
  33.           move.l    4(sp),a6            ;adresse base page
  34.           pea       vecinit
  35.           move.w    #supexec,-(sp)
  36.           trap      #xbios
  37.           addq.l    #6,sp
  38.           move.l    bsslen(a6),d1
  39.           moveq     #9,d0               ;bsslen div 512
  40.           lsr.l     d0,d1               ;# blocks
  41.           sub.w     datrec,d1           ;# dataenbloecke
  42.           lsr.w     #1,d1               ;# datencluster
  43.           move.w    d1,numcl
  44.           move.l    prglen(a6),d0
  45.           add.l     datalen(a6),d0
  46.           add.l     bsslen(a6),d0
  47.           add.l     #256,d0
  48.           clr.w     -(sp)               ;exit code
  49.           move.l    d0,-(sp)            ;length
  50.           move.w    #keepterm,-(sp)
  51.           trap      #tos
  52.  
  53. vecinit:  move.l    hdv_rw,oldrw+2
  54.           move.l    #rw,hdv_rw
  55.           move.l    hdv_bpb,oldbpb+2
  56.           move.l    #bpb,hdv_bpb
  57.           move.l    hdv_media,oldmedia+2
  58.           move.l    #media,hdv_media
  59.           move.l    drvbits,d0
  60.           move.l    d0,d2
  61.           moveq     #0,d1
  62. drvlp:    lsr.l     #1,d0
  63.           bcc.s     drvfnd
  64.           addq.w    #1,d1
  65.           bra.s     drvlp
  66. drvfnd:   bset      d1,d2
  67.           move.l    d2,drvbits
  68.           move.w    d1,drive
  69.           rts
  70.  
  71. rw:       move.w    drive,d0
  72.           cmp.w     14(sp),d0
  73.           bne       oldrw
  74.           lea       rambase,a0
  75.           move.l    6(sp),a1            ;tos buffer
  76.           moveq     #0,d0
  77.           move.w    12(sp),d1           ;start block
  78.           moveq     #9,d0               ; * 512
  79.           asl.l     d0,d1
  80.           add.l     d1,a0
  81.           move.w    10(sp),d0           ;# of blocks
  82.           move.l    a1,d2
  83.           btst      #0,d2
  84.           bne.s     bytes
  85.           asl.l     #7,d0               ;blocks -> longs
  86.           btst      #0,5(sp)            ;rwflg
  87.           bne.s     lwords
  88.           exg       a0,a1
  89. lwords:   move.l    (a1)+,(a0)+
  90.           subq.l    #1,d0
  91.           bne.s     lwords
  92.           rts
  93. bytes:    moveq     #9,d1
  94.           asl.l     d1,d0               ;blocks -> bytes
  95.           btst      #0,5(sp)            ;rwflg
  96.           bne.s     bytes1
  97.           exg       a0,a1
  98. bytes1:   move.b    (a1)+,(a0)+
  99.           subq.l    #1,d0
  100.           bne.s     bytes1
  101.           rts
  102.  
  103. oldrw:    jmp       -1
  104.  
  105. bpb:      move.w    drive,d0
  106.           cmp.w     4(sp),d0
  107.           bne.s     oldbpb
  108.           move.l    #mybpb,d0
  109.           rts
  110.  
  111. oldbpb:   jmp       -1
  112.  
  113. media:    move.w    drive,d0
  114.           cmp.w     4(sp),d0
  115.           bne.s     oldmedia
  116.           moveq     #0,d0
  117.           rts
  118.  
  119. oldmedia: jmp       -1
  120.  
  121.           .data
  122. drive:    dc.w      0
  123. mybpb:    dc.w      512
  124. clsiz:    dc.w      2
  125. clsizb:   dc.w      1024
  126. rdlen:    dc.w      7
  127. fsiz:     dc.w      5
  128. fatrec:   dc.w      6
  129. datrec:   dc.w      18
  130. numcl:    dc.w      351
  131.  
  132.           .bss
  133. rambase   ds.b      blocks*1024
  134.  
  135.           .end
  136. əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə